#include <iostream>
#include <math.h>
#define pi 3.14159
using namespace std; 

class n_c {
private:
  float p_r;
  float p_i;
public:
  n_c(); //costruttore non parametrizzato;
  float modulo;
  void stampa();
  void stampa(float);
  void inserisci(float , float);
  void inserisci();
  float calcola_modulo();
  friend float arg(n_c); 
};


n_c::n_c()
{
cout <<"inizializzo" << endl <<endl;
p_r=0.0;
p_i=0.0;
}

void n_c::stampa()
{
	cout<<"("  << p_r << " , " << p_i << ")"<<endl<<endl;
}

void n_c::stampa(float)
{
	cout<<"il modulo di ("  << p_r << " , " << p_i << ") vale " << modulo << endl<< endl;
}


void n_c::inserisci(float i, float j)
{
p_r = i;
p_i = j;
} 

void n_c::inserisci()
{
cout <<"inserisci parte reale e parte immaginaria diverse entrambe da zero" << endl <<endl;
cin >> p_r >> p_i ;
} 

float n_c::calcola_modulo()
{
modulo=(float)sqrt(p_r*p_r+p_i*p_i);
return modulo;
}

float arg(n_c copia)
{
if (copia.p_r>=0)
	return ((atan(copia.p_i/copia.p_r))/pi)*180;
else
	return ((atan(copia.p_i/copia.p_r))/pi)*180-180;
}

int main()
{
  n_c  C1,C2;
  cout <<"valore iniziale dei numeri complessi" <<endl <<endl;
  C1.inserisci(1,1);
  cout <<"primo numero complesso"<< endl;
  C1.stampa();
  C1.stampa(C1.calcola_modulo());
  C2.inserisci();
  cout << endl << "secondo numero complesso"<< endl;
  C2.stampa();
  C2.stampa(C2.calcola_modulo());
  cout << endl << "mi ripeto vale " << C2.modulo << endl << endl;
  cout <<"la fase dei due numeri vale in gradi " << endl << endl << arg(C1) << endl <<endl  << arg(C2) <<endl <<endl;
  return 0;
}

/* risultato
inizializzo

inizializzo

valore iniziale dei numeri complessi

primo numero complesso
(1 , 1)

il modulo di (1 , 1) vale 1.41421

inserisci parte reale e parte immagina

1
0

secondo numero complesso
(1 , 0)

il modulo di (1 , 0) vale 1


mi ripeto vale 1

la fase dei due numeri vale in gradi

45

0

Press any key to continue
*/
